package pers.wensheng.patterns.creator_pattern.singleton_pattern.lazy.impl3;

/**
 *  懒汉式-方式4（静态内部类方式）
 *  静态内部类单例模式中实例由内部类创建，由于 JVM 在加载外部类的过程中, 是不会加载静态内部类的,
 *  只有内部类的属性/方法被调用时才会被加载, 并初始化其静态属性。
 *  静态属性由于被 `static` 修饰，保证只被实例化一次，并且严格保证实例化顺序。
 *
 *  也推荐用；；；；
 *  静态内部类单例模式是一种优秀的单例模式，是开源项目中比较常用的一种单例模式。
 *  在没有加任何锁的情况下，保证了多线程下的安全，并且没有任何性能影响和空间的浪费。
 */
public class Singleton {

    private Singleton(){}

    private static Singleton instance;

    public static Singleton getInstance(){
        return SingletonHolder.INSTANCE;
    }

    //外界不能访问
    private static class SingletonHolder {
        //在内部类中声名并初始化外部类的对象
        public static final Singleton INSTANCE = new Singleton();
    }
}
